package com.xingchi.tornado.storage.core.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xingchi.tornado.mybatisplus.service.AbstractBasePlusService;
import com.xingchi.tornado.storage.core.mapper.FileMapper;
import com.xingchi.tornado.storage.core.model.domain.FileDO;
import com.xingchi.tornado.storage.core.model.dto.FileDTO;
import com.xingchi.tornado.storage.core.model.dto.FileQueryDTO;
import com.xingchi.tornado.storage.core.service.FileService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 文件信息表 服务实现类
 * </p>
 *
 * @author xingchi
 * @date 2024-05-04 18:01
 */
@Service
public class FileServiceImpl extends AbstractBasePlusService<FileMapper, FileDTO, FileQueryDTO, FileDO> implements FileService {
    @Override
    public Wrapper<FileDO> getWrapper(FileQueryDTO query) {
        return Wrappers.<FileDO>lambdaQuery()
                .eq(StringUtils.isNotBlank(query.getPath()), FileDO::getPath, query.getPath())
                .eq(StringUtils.isNotBlank(query.getSha256()), FileDO::getSha256, query.getSha256());
    }


    /**
     * 根据文件哈希值进行查询文件，用于校验文件是否已存在
     *
     * @param sha256 文件对应的哈希值
     * @return 文件信息
     */
    @Override
    public FileDTO selectBySha256(String sha256) {
        return this.selectOne(FileQueryDTO.builder().sha256(sha256).build());
    }

    /**
     * 根据文件路径查询文件
     *
     * @param path 根据文件路径查询文件信息
     * @return 文件信息
     */
    @Override
    public FileDTO selectByPath(String path) {
        return this.selectOne(FileQueryDTO.builder().path(path).build());
    }

    /**
     * 是否存在对应文件
     *
     * @param sha256 文件sha256
     * @return 是否存在
     */
    @Override
    public boolean exists(String sha256) {
        FileDTO fileDTO = this.selectBySha256(sha256);
        return fileDTO != null;
    }
}
